// Copyright 2022 a.o.smith ALL Rights Reserved
package com.liuxinlong.modules.mapper;

import java.util.List;
import java.util.Map;

import com.liuxinlong.modules.system.dto.ExportUserDto;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import com.liuxinlong.modules.entity.User;
import com.baomidou.mybatisplus.mapper.BaseMapper;

/**
 * 类描述
 * <p>
 * 此类关联设计的功能
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2022年2月22日
 */
public interface UserMapper extends BaseMapper<User> {
    /**
     * 查询用户列表
     *
     * @param queryParam 查询参数
     * @return 用户列表
     */
    List<User> pageUserList(@Param("queryParam") Map<String, Object> queryParam);

    /**
     * 统计查询用户数量
     *
     * @param queryParam 查询参数
     * @return 用户数量
     */
    int getUserCount(@Param("queryParam") Map<String, Object> queryParam);

    /**
     * 根据用户账号查询用户信息
     *
     * @param account 用户账号
     * @return 用户信息
     */
    User getUserByAccount(String account);

    /**
     * 修改用户在线状态
     *
     * @param userId        用户id
     * @param targetStatus  当前状态
     * @param lastLoginTime 最后登陆时间
     */
    void updateUserStatus(@Param("userId") String userId, @Param("targetStatus") int targetStatus, @Param("lastLoginTime") String lastLoginTime);

    /**
     * 查询用户信息map
     *
     * @return 用户信息map
     */
    @MapKey("id")
    Map<String, Map<String, String>> getUserMap();

    /**
     * 查询用户信息(含头像)map
     * id: userInfo
     *
     * @return 用户信息(含头像)map
     */
    @MapKey("id")
    Map<String, Map<String, String>> getUserPictureMap();

    /**
     * 查询全部用户信息
     *
     * @return 用户信息列表
     */
    List<User> getUserList();

    /**
     * 查询全部用户信息
     *
     * @return 用户信息列表
     */
    List<ExportUserDto> getAllUserList();

    /**
     * 用户密码修改
     *
     * @param userId   用户id
     * @param password 新密码
     */
    void updatePassword(@Param("userId") String userId, @Param("password") String password);

    /**
     * 用户拓展信息修改
     *
     * @param userInfo 用户信息
     */
    void updateUserExp(@Param("param") User userInfo);

    /**
     * 查询用户信息map
     * sn:userInfo
     *
     * @return 用户信息map
     */
    @MapKey("sn")
    Map<String, Map<String, String>> getUserMapBySn();

    /**
     * 获取在线用户列表
     *
     * @return 在线用户列表
     */
    List<User> getOnlineUserList();

    /**
     * 根据用户工号获取用户信息
     *
     * @param sn 工号
     * @return 用户信息
     */
    User getUserBySn(String sn);

    /**
     * 根据部门获取用户信息
     *
     * @param depList 部门列表
     * @return 用户信息列表
     */
    List<String> getUserByDeps(@Param("depList") List<String> depList);

    /**
     * 查询用户企业微信信息map
     *
     * @return 用户企业微信信息map
     */
    @MapKey("id")
    Map<String, Map<String, String>> getUserWechatMap();

    /**
     * 根据名称获取用户列表
     *
     * @param userName 用户名
     * @return 用户列表
     */
    List<User> getUserListByName(String userName);

    /**
     * 获取全部用户基本信息
     *
     * @return 全部用户基本信息
     */
    List<User> getUserBaseList();
}
